.Net Core配置到Nginx


1、安装.net core环境

打开网站:.NET Downloads (Linux, macOS, and Windows) (microsoft.com)

选择要下载的版本,点击进去

Download .NET Core 3.1 (Linux, macOS, and Windows) (microsoft.com)

进入这个网站以后,选择SDK,然后找到对应的服务器的系统版本,注意一下32位和64位的区别

选择x64会打开一个新的网页:Download .NET Core 3.1 SDK (v3.1.409) - Linux x64 Binaries (microsoft.com)

这个里边有安装命令

# 进入/usr/local文件夹
$ cd /usr/local

# 新建一个dotnet3.1的安装目录
$ mkdir dotnet-3.1

# 进去 刚才创建的安装目录文件夹
$ cd dotnet-3.1

# 在当前安装目录下载dotnet core3.1 的sdk的压缩文件
$ wget https://download.visualstudio.microsoft.com/download/pr/dfbc47b7-4c2c-4e00-989e-a18f6f2e8fe8/5f42a60705fd9122837c68dcbdbbe278/dotnet-sdk-3.1.409-linux-x64.tar.gz

# 解压文件
$ tar zxf dotnet-sdk-3.1.409-linux-x64.tar.gz

# 进入主目录
$ cd /

# 打印一下dotnet的信息,如果提示找不到命令,那就说明前边的步骤有问题了
$ /usr/local/dotnet-3.1/dotnet --info

2、上传发布过后的文件夹

注意:在VS发布的时候,因为服务器是Linux,所以发布的平台为Linux

发布完成以后,使用scp命令上传文件

# -P 后边跟的是服务器的端口号
# UserServiceAPI 是你发布后的文件夹
# @ 前边的huahansoft-linux是用户名
# @ 后边的192.168.0.201是服务器的IP
# :后边的 /home/qrcbank-date 是要存储到服务器上的文件夹(注意:这个地方不需要加UserServiceAPI)
$ scp -P 22 -r UserServiceAPI huahansoft-linux@192.168.0.201:/home/huahansoft-linux

3、移动位置并赋予权限

上边我们将发布后的文件传到服务器上以后,位置是在/home/huahansoft-linux/UserServiceAPI,但是实际上我们的项目是不会放在这个地方的。一般都是放在/home/www文件夹下,所以需要移动文件夹

# 移动之前先删除原来的文件夹
$ rm -fr /home/www/UserServiceAPI

# 移动文件夹
$ mv /home/huahansoft-linux/UserServiceAPI /home/www

程序配置到服务器上,一般不使用root或者远程用户huahansoft-linux来启动,所以我们可以单独建一个用户用来启动网站,这个一般都跟项目名称保持一致了,举个例子:项目名叫 abc,那么我就新建一个用户叫abc【要提前订好这个名字,不要不同的人建重复了】

# 新建用户组
$ groupadd abc

# 新建一个输入abc用户组的abc用户,兵器指定abc用户不能用户shell登录
$ useradd -g abc abc -s /usr/sbin/nologin

建完这个用户以后,因为项目是用这个用户启动的,所以要指定项目的所有者为abc用户

# 将/home/huahansoft-linux/UserServiceAPI的所有者设置成 abc:abc 【一个用户组,一个用户】
$ chown -R abc:abc /home/huahansoft-linux/UserServiceAPI

4、创建服务

上边弄完以后,我们可以使用/usr/local/dotnet-3.1/dotnet /home/huahansoft-linux/UserServiceAPI/UserserviceAPI.dll来启动网站,但是这个有个问题,是在前端启动的,一旦我们推出远程桌面,程序就停止了,所以要建立一个服务,让他自己开机启动

# 新建一个服务文件,存在修改,不存在创建
# abc-userserviceapi:前边是项目名,后边是当前模块名【可以按照后台、接口区分】
$ vim /etc/systemd/system/abc-userserviceapi.service

# 然后将下边的内容拷贝进去
[Unit]
Description=qrc transcationapi Web API App running on Ubuntu

[Service]
WorkingDirectory=/home/www/TranscationServiceAPI
ExecStart=/usr/local/dotnet-3.1/dotnet /home/huahansoft-linux/UserServiceAPI/UserserviceAPI.dll --urls=http://*:20014
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=qrc-transcationapi
User=abc
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target


# 这个里边有几个地方需要改
# 1. Description:项目描述,这个修改成你自己的描述即可
# 2. WorkingDirectory:项目工作目录,这个是项目的目录
# 3. ExecStart:启动命令,类似于在命令行中执行的启动网站的命令,--urls指定了项目的端口
# 5. SyslogIdentifier:项目标识,这个一定是每个项目不一样的
# 6. User:启动项目的用户,不带用户组

# 其他的都不用动

服务创建完成以后,可以启动服务看一下

# 启动服务 abc-userserviceapi:服务名称,这个就是上边创建的服务的文件名
$ systemctl start abc-userserviceapi

# 启动以后,看一下状态是否正常
$ systemctl status abc-userserviceapi

# 如果将来重新上传程序,不需要停止服务需要执行重启
$ systemctl restart abc-userserviceapi

# 也可以停止服务
$ systemctl stop abc-userserviceapi

这个地方需要注意一个问题,如果我修改了abc-userserviceapi.service这个文件,那么需要执行另外一个命令才能使用上边的命令

$ systemctl daemon-reload

5、设置nginx代理

上边已经在服务器上把UserServiceAPI跑起来了,但是只能通过http://localhost:20014进行访问,下边就是使用nginx做代理,可以让项目在公网访问

打开/usr/local/nginx-1.18.0/conf/webhosts目录,新建一个abc-userservice.conf文件【每个项目一个,不要混用】

$ cd /usr/local/nginx-1.18.0/conf/webhosts

$ vim abc-userservice.conf

# 将下列内容拷贝进去
server {
    listen        20052;
    server_name   192.168.0.201;
    location / {
        proxy_pass         http://localhost:20014;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

# 1. listen:nginx要监听的本地端口,这个地方如果将来是客户的机器,那么使用80就可以,如果是内网,那么需要指定一个本地的端口【项目端口20014是不能用的】
# 2. server_name:域名,因为是在内网,所以使用的是IP,外网可以使用域名。e.g. www.abc.com
# 3. proxy_pass:代理的项目的地址

保存文件,然后重启nginx服务

$ systemctl restart nginx-1.18.0.service

重启完成以后,在自己的电脑上使用http://192.168.0.201:20052进行访问。

6、配置图片网站

上边是配置的.net core的应用程序,我们在项目中还使用了一种minio上传图片的技术,图片是上传到minio中了,但是对外访问还需要从nginx代理走

server {
    listen 9002;
    server_name 192.168.0.201;
    charset utf-8;
    location / {
        root /home/minio/data;
        index index.html;
        image on;
        image_output on;
        image_jpeg_quality 100;
    }
}

这个里边,location中指定了图片路径,注意:这个是到配置项目的那个文件夹,不是根目录

下边的imageimage_outputimage_jpeg_quality就是我们之前配置的nginx插件的中的东西

具体的看下边

image on/off 是否开启缩略图功能,默认关闭

image_backend on/off 是否开启镜像服务,当开启该功能时,请求目录不存在的图片(判断原图),将自动从镜像服务器地址下载原图

image_backend_server 镜像服务器地址

image_output on/off 是否不生成图片而直接处理后输出 默认off

image_jpeg_quality 75 生成JPEG图片的质量 默认值75

image_water on/off 是否开启水印功能

image_water_type 0/1 水印类型 0:图片水印 1:文字水印

image_water_min 300 300 图片宽度 300 高度 300 的情况才添加水印

image_water_pos 0-9 水印位置 默认值9 0为随机位置,1为顶端居左,2为顶端居中,3为顶端居右,4为中部居左,5为中部居中,6为中部居右,7为底端居左,8为底端居中,9为底端居右

image_water_file 水印文件(jpg/png/gif),绝对路径或者相对路径的水印图片

image_water_transparent 水印透明度,默认20

image_water_text 水印文字 "Power By Vampire"

image_water_font_size 水印大小 默认 5

image_water_font 文字水印字体文件路径

image_water_color 水印文字颜色,默认 #000000

我们访问某一个图片的时候,用下边的方式访问即可

原图:http://192.168.1.200:9002/demo/user/1.jpg
压缩后的:http://192.168.1.200:9002/demo/user/1.jpg!c300x300.jpg

    #有关参数:

    c参数按请求宽高比例从图片高度10%处开始截取图片,然后缩放到指定尺寸

    m参数按请求宽高比例从图片中截取图片,然后缩放到指定尺寸

    t参数按请求宽高比例缩放到指定尺寸

    w参数按请求宽高比例缩放到指定尺寸,空白处填充白背景颜色

results matching ""

    No results matching ""